import Vue from './runtime/index'
import { query } from './util/index'
import { compileToFunctions } from './compiler/index'
// runtime-with-compiler版本 重新$mount 对原$mount进行扩充
const mount = Vue.prototype.$mount
Vue.prototype.$mount = function (el, hydrating){
  el = el && query(el)
  if(el === document.body || el === document.documentElement){
    return this
  }
  const options = this.$options
  // 若果不存在render选项，则将template/el的设置转换为render函数
  // 由此判定 render优先级最高 如果render存在 则template和el将不生效
  // 其次为template选项 最后为el选项
  if(!options.render){
    let template = options.template
    if(template){
      if(typeof template === 'string'){
        if(template.charAt(0) === '#'){
          template = idToTemplate(template)
        }
      }else if(template.nodeType){
        template = template.innerHTML
      }else {
        return this
      }
    }else if(el){
      template = getOuterHTML(el)
    }

    if(template) {
      // 如果存在template则执行，若存在el则通过调用getOuterHTML转为template执行
      // 渲染函数
      const render = compileToFunctions(template,{},this)
    }
  }
  return mount.call(this, el, hydrating)
}

const idToTemplate = (id) => {
  const el = query(id)
  return el && el.innerHTML
}

function getOuterHTML(el) {
  if(el.outerHTML) {
    return el.outerHTML
  }else {
    const container = document.createElement('div')
    container.appendChild(el.cloneNode(true))
    return container.innerHTML
  }
}

// Vue.compile = compileToFunctions

export default Vue